package cn.kgc.mybatis;

import cn.kgc.mybatis.entity.Student;
import com.mysql.jdbc.Driver;
import org.junit.Test;

import java.sql.*;
import java.util.ArrayList;

/**
 * @author 课工场
 * @date 2024/1/23
 * @description  jdbc如何实现数据的crud操作
 *
 * JDBC使用的基本步骤:
 * 1.导包
 * 2.注册驱动
 * 3.获取连接
 * 4.获取statement对象
 * 5.编写sql  执行sql
 * 6. 处理结果集
 * 7.释放资源
 *
 * JDBC操作数据库存在的不足:
 *   1. 获取连接的步骤繁琐
 *   2. 释放资源过程繁琐   jdbc.util  druid
 *   3. 处理结果集繁琐     BeanUtil
 *   4.  sql语句和java代码存在耦合
 *   5. 搜索  3条件  动态sql  字符串的拼接
 *   6. 查询的数据结果没有缓存
 *
 * mybatis持久层框架  可以解决以上分析的问题
 *  MyBatis 是一款优秀的持久层框架，它支持自定义 SQL、存储过程以及高级映射。
 *  MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
 *  MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO（Plain Old Java Objects，普通老式 Java 对象）
 *  为数据库中的记录。
 */
public class JDBCOperation {

    //  jdbc 实现数据的查询操作
    @Test
    public void testSelect(){

        //  反射获取类对象的方式    Class.forName  类名.class  对象名.getClass
        // 注册驱动
        // try {
        //     Class.forName("com.mysql.jdbc.Driver");
        // } catch (ClassNotFoundException e) {
        //     throw new RuntimeException(e);
        // }
        try {

            Driver driver = new Driver();
            DriverManager.registerDriver(driver);
            String  username = "root";
            String password = "root";
            // jdbc:mysql://  协议   http://   http
            String url = "jdbc:mysql:///java2323?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false";
            Connection connection = DriverManager.getConnection(url, username, password);
            System.out.println("connection = " + connection);

            //  获取执行sql语句的对象
            String sql = "select *  from  student";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            //  处理结果集
            ResultSet resultSet = preparedStatement.executeQuery();
            ArrayList<Student> students = new ArrayList<Student>();
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                double weight = resultSet.getDouble("weight");
                Student student = new Student(id,name,age,weight);
                students.add(student);
            }

            // 打印结果集
            System.out.println("students = " + students);

            //  释放资源
            resultSet.close();
            preparedStatement.close();
            connection.close();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }


    @Test
    public void testDelete(){

        try {
            Driver driver = new Driver();
            DriverManager.registerDriver(driver);
            String  username = "root";
            String password = "root";
            // jdbc:mysql://  协议   http://   http
            String url = "jdbc:mysql:///java2323?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false";
            Connection connection = DriverManager.getConnection(url, username, password);


        }catch (Exception e){
            e.printStackTrace();
        }


    }
}
